package org.comidas;

import java.util.ArrayList;
import java.util.List;

public final class ListaComidas{
	
	private static ListaComidas listaComidas = null;
	private static List<Comida> lista = new ArrayList<Comida>();
	
	private ListaComidas(){
		
	}
	
	public static ListaComidas getInstance(){
		if(listaComidas == null){
			listaComidas = new ListaComidas();
		}
		return listaComidas;
	}
	
	public void iniciaListaVazia(){
		lista = new ArrayList<Comida>();
	}
	
	public void addComida(Comida cmd){
		
		for (int i = 0; i < lista.size(); i++){
			if (cmd.compareTo(lista.get(i)) < 0){
				lista.add(i, cmd);
				return;			
			}
		}
		lista.add(cmd);
	}
	
	public void addComida(Comida novaComida, int index) {
		lista.add(index, novaComida);	
	}
	
	public void removeComida(Comida cmd){
		lista.remove(cmd);
	}
	
	public void removeComida(int position){
		lista.remove(position);
	}
	
	public String[] toArrayString(){
		String[] retorno = new String[lista.size()];
		for(int i=0;i<lista.size();i++){
			retorno[i] = lista.get(i).getNome();
		}
		return retorno;
	}
	
	public int size(){
		return lista.size();
	}
	
	public String sizeString(){
		Integer i = new Integer(lista.size());
		return i.toString();
	}
	
	public Comida getComida(int posicao){
		return lista.get(posicao);
	}
	
	public int contains(String comida){
        int inicio = 0;
        int fim = lista.size()- 1;
        while (inicio <= fim) {
            int meio = inicio + (fim - inicio) / 2;
            if      (comida.compareTo(lista.get(meio).getNome()) < 0) fim = fim - 1;
            else if (comida.compareTo(lista.get(meio).getNome()) > 0) inicio = inicio + 1;
            else return meio;
        }
        return -1;
    }
	
}
